package com.fast.alden.admin.service;

import com.fast.alden.common.service.BaseEntityService;
import com.fast.alden.data.model.SysUser;
import com.fast.alden.data.repo.SysUserRepository;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * 用户实体服务
 */
public interface SysUserService extends BaseEntityService<SysUser, SysUserRepository> {
    /**
     * 修改用户实体，不支持修改ID、密码、头像、用户类型、最后登录信息
     *
     * @param entity
     * @return
     */
    @Override
    SysUser update(SysUser entity);

    /**
     * 修改指定用户密码
     *
     * @param userId      用户ID
     * @param newPassword 新密码
     */
    void updatePassword(Long userId, String newPassword);

    /**
     * 重置指定用户密码
     *
     * @param userId      用户ID
     * @param newPassword 可为空，为空时使用内置默认密码重置
     */
    void resetPassword(Long userId, String newPassword);

    /**
     * 修改指定用户头像
     *
     * @param userId 用户ID
     * @param file   头像文件
     * @throws IOException
     */
    void updateAvatar(Long userId, MultipartFile file) throws IOException;

    /**
     * 删除指定用户头像
     *
     * @param userId 用户ID
     */
    void removeAvatar(Long userId);

    /**
     * 修改最后登录信息
     *
     * @param entity
     */
    void updateLoginInfo(SysUser entity);

    /**
     * 导出所有数据至Excel文件
     *
     * @throws IOException
     */
    void exportExcel() throws IOException;

    /**
     * 从Excel文件导入数据
     *
     * @param file
     */
    void importExcel(MultipartFile file) throws IOException;

    /**
     * 根据username、email、phone查找用户
     *
     * @param account 账户
     * @return
     */
    SysUser findByAccount(String account);
}
